package main

import "fmt"

// 定义
//
//	type Jiegou struct {
//		变量名称 变量类型;
//	}

// 创建结构体对象如果没有给字段赋值，则默认零值（字符串默认 “",数值默认0，布尔默认false，切片和map默认nil对象）
type Student struct {
	sid, uid int //同类型的变量也可以写在一行，用逗号隔开
	name     string
	age      int8
	course   []string //切片类型
}

func main() {
	// 声明一个结构体对象 ,值类型，默认开辟空间，字段赋予零值
	var s Student
	fmt.Println("s:", s)
	// 要访问结构体成员，需要使用点号 . 操作符
	fmt.Println(s.name)
	// 更改成员变量的值
	s.name = "yuan"
	fmt.Println(s.name)
	// s.course[0] = "chinese"   // 结果，如何调整

	s.sid = 1001
	s.age = 23
	s.course = []string{"chinese", "math", "english"}
	fmt.Printf("%p\n", &s)
	fmt.Printf("%p\n", &(s.sid))
	fmt.Printf("%p\n", &(s.age))
	fmt.Printf("%p\n", &(s.course)) // 切片24个字节

	//匿名结构体，结构体是临时用的，不用起名字，直接使用
	var dog struct {
		id   int
		name string
	}
	dog.id = 1
	dog.name = "金毛"
	fmt.Println(dog)
}
